﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormProject.Depo
{
    public partial class UrunTransferFrm : Form
    {
        public UrunTransferFrm()
        {
            InitializeComponent();
        }
        GenelIslemler GI = new GenelIslemler();
        UrunIslemler.UrundetayIslemler UD = new UrunIslemler.UrundetayIslemler();
        UrunTransferIslemleri.StokHareketDetayIslemler SHD = new UrunTransferIslemleri.StokHareketDetayIslemler();
        UrunTransferIslemleri.StokHareketTut YeniStokHareket = new UrunTransferIslemleri.StokHareketTut();
        public BindingSource MySource = new BindingSource();
        DataSet MyDataSet = new DataSet();


        private void UrunTransferFrm_Load(object sender, EventArgs e)
        {
            Depo.GenelIslemler.EnterIlerleload(this.Name);
            StokHaraketGonderenSubeID.DataSource = GI.Subeler();
            StokHaraketGonderenSubeID.DisplayMember = "SubeAdi";
            StokHaraketGonderenSubeID.ValueMember = "SubeID";
            StokHaraketAlanSubeID.DataSource = GI.Subeler();
            StokHaraketAlanSubeID.DisplayMember = "SubeAdi";
            StokHaraketAlanSubeID.ValueMember = "SubeID";


        }

        private void formClear()
        {
            UrunID.Text = "";
            UrunAdi.Text = "";
            StokHaraketAdet.Text = "0.00";

        }
        List<Listetut> TransferListesi = new List<Listetut>();
        decimal adet = 0;
        decimal sanalmiktar = 0;
        decimal eldekimiktar = 0;

        public class Listetut
        {
            public string UrunID { get; set; }
            public string UrunADi { get; set; }
            public decimal StokHaraketAdet { get; set; }
            public int StokHaraketGonderenSubeID { get; set; }
            public int StokHaraketAlanSubeID { get; set; }
            public DateTime StokHaraketTarih { get; set; }
            public string StokHaraketHaraketTuru { get; set; }
            public string StokHaraketIrsaliyeNo { get; set; }
            public int StokHaraketID { get; set; }

        }

        private void bt_ekle_Click(object sender, EventArgs e)
        {
            if (KaynakSube != HedefSube && StokHaraketIrsaliyeNo.Text.Trim().Length > 0 && Convert.ToDecimal(StokHaraketAdet.Text) > 0 && StokHaraketHaraketTuru.Text.Trim().Length > 0)
            {
                var eldekimiktargetir = (from x in db.MErkezUrunlers where x.UrunId == UrunID.Text select x.UrunStokAdet).FirstOrDefault();
                if (eldekimiktargetir < Convert.ToDecimal(StokHaraketAdet.Text))
                {
                    MessageBox.Show("Çıkış Miktarı eldeki miktarı karşılamıyor. Çıkabilecek Miktar=" + eldekimiktargetir.ToString());
                    return;
                }
                Listetut sh = new Listetut();
                sh.UrunID = UrunID.Text;
                sh.StokHaraketAdet = Convert.ToDecimal(StokHaraketAdet.Text);
                sh.StokHaraketGonderenSubeID = int.Parse(StokHaraketGonderenSubeID.SelectedValue.ToString());
                sh.StokHaraketAlanSubeID = int.Parse(StokHaraketAlanSubeID.SelectedValue.ToString());
                sh.StokHaraketTarih = StokHaraketTarih.Value.Date;
                sh.StokHaraketHaraketTuru = StokHaraketHaraketTuru.Text;
                sh.StokHaraketIrsaliyeNo = StokHaraketIrsaliyeNo.Text;
                sh.UrunADi = (from x in db.MErkezUrunlers where x.UrunId == UrunID.Text select x.UrunADi).FirstOrDefault();



                var varmi = (from x in TransferListesi
                             where x.UrunID == UrunID.Text && x.StokHaraketIrsaliyeNo == StokHaraketIrsaliyeNo.Text
                             select x).FirstOrDefault();
                if (varmi != null)
                {
                    MessageBox.Show("Kayıt Daha Önce Girilmiş");


                }
                var UrundeDegisiklikGerekliMi = (from x in TransferListesi
                                                 where x.UrunID == UrunID.Text && x.StokHaraketIrsaliyeNo == StokHaraketIrsaliyeNo.Text
                                                 select x).FirstOrDefault();
                if (UrundeDegisiklikGerekliMi != null)
                {
                    if (MessageBox.Show("Girmek istediğiniz urun daha onceden kaydedilmiş!\nDaha Önce Kayıtlı Stok: " + UrundeDegisiklikGerekliMi.StokHaraketAdet + "\nYeni Girilen Stok: " + StokHaraketAdet.Text + "\nDeğiştirmek istediğinize eminmisiniz?", "Uyarı!!!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                    {

                        UrundeDegisiklikGerekliMi.StokHaraketAdet = decimal.Parse(StokHaraketAdet.Text);
                        formClear();
                    }
                    else
                    {
                        formClear();
                    }
                }
                else
                {
                    TransferListesi.Add(sh);
                    formClear();


                }

                adet = TransferListesi.Sum(f => f.StokHaraketAdet);
                StokHaraketAdetToplam.Text = adet.ToString();
                dataGridView1.DataSource = TransferListesi.ToList();
                formClear();
            }
            else
            {

                if (KaynakSube == HedefSube)
                {
                    MessageBox.Show("Farklı bir şube seçiniz");
                }
                if (StokHaraketIrsaliyeNo.Text.Trim().Length <= 0)
                {
                    MessageBox.Show("Evrak numarası boş geçilemez");
                }
                if (Convert.ToDecimal(StokHaraketAdet.Text) <= 0)
                {
                    MessageBox.Show("Miktar 0 olamaz");
                }
                if (StokHaraketHaraketTuru.Text.Trim().Length == 0)
                {
                    MessageBox.Show("Açıklama Boş geçilemez");
                }
            }



            //if (UrunID.Text.Trim().Length == 0 && StokHaraketIrsaliyeNo.Text.Trim().Length==0 && StokHaraketAdet.Text.Trim().Length==0)
            //    return;
            //if (bt_kaydet_StokHareketKaydet_List(StokHaraketIrsaliyeNo.Text, UrunID.Text))
            //{

            //    formClear();

            //}
        }

        private void bt_iptal_Click(object sender, EventArgs e)
        {

            var iptalet = (from x in TransferListesi where x.UrunID == GecerliKayit select x).FirstOrDefault();
            if (iptalet != null)
            {
                if (MessageBox.Show("İptal etmek  istediğinize eminmisiniz?", "Uyarı!!!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {

                    TransferListesi.Remove(iptalet);
                    dataGridView1.DataSource = TransferListesi.ToList();
                    adet = TransferListesi.Sum(f => f.StokHaraketAdet);
                    StokHaraketAdetToplam.Text = adet.ToString();

                }

            }



        }

        private bool bt_kaydet_StokHareketKaydet_List(string StokHaraketIrsaliyeNo_text, string UrunID_text)
        {
            GenelIslemler.BackGrounWorkerCalistir(this.BGWTransferDoldur);
            try
            {
                //if (  SHD.Get_RecordCount(StokHaraketIrsaliyeNo_text)>0)
                //{
                //    YeniStokHareket.UrunId = UrunID.Text;
                //    YeniStokHareket.StokHaraketAdet = Convert.ToInt32(StokHaraketAdet.Text);
                //    YeniStokHareket.StokHaraketGonderenSubeID = Convert.ToInt32(StokHaraketGonderenSubeID.SelectedValue);
                //    YeniStokHareket.StokHaraketAlanSubeID = Convert.ToInt32(StokHaraketAlanSubeID.SelectedValue);
                //    YeniStokHareket.StokHaraketTarih = StokHaraketTarih.Text;
                //    YeniStokHareket.StokHaraketHaraketTuru = StokHaraketHaraketTuru.Text;
                //    YeniStokHareket.StokHaraketIrsaliyeNo = StokHaraketIrsaliyeNo.Text;
                //    SHD.StokHareketKayitEkle(YeniStokHareket);
                //    SHD.StokHareketVeriTabaniKayitGuncelle(YeniStokHareket);

                //}
                YeniStokHareket.UrunId = UrunID.Text;
                YeniStokHareket.StokHaraketAdet = Convert.ToInt32(StokHaraketAdet.Text);
                YeniStokHareket.StokHaraketGonderenSubeID = Convert.ToInt32(StokHaraketGonderenSubeID.SelectedValue);
                YeniStokHareket.StokHaraketAlanSubeID = Convert.ToInt32(StokHaraketAlanSubeID.SelectedValue);
                YeniStokHareket.StokHaraketTarih = StokHaraketTarih.Text;
                YeniStokHareket.StokHaraketHaraketTuru = StokHaraketHaraketTuru.Text;
                YeniStokHareket.StokHaraketIrsaliyeNo = StokHaraketIrsaliyeNo.Text;
                SHD.StokHareketKayitEkle(YeniStokHareket);
                SHD.StokHareketVeriTabaninaKaydet(YeniStokHareket);

            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            return true;
        }

        private void StokHaraketAdet_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsDigit(e.KeyChar) == false && e.KeyChar != (char)08 && e.KeyChar != '.' && e.KeyChar != ',' && e.KeyChar != (char)127 && e.KeyChar != (char)44)
            {
                e.Handled = true;

            }
        }

        private void BGWTransferDoldur_DoWork(object sender, DoWorkEventArgs e)
        {
            MyDataSet.Reset();
            MyDataSet.Tables.Add(SHD.StokHareketleri(StokHaraketIrsaliyeNo.Text));

        }

        //private void BGWTransferDoldur_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        //{


        //    MySource.DataSource = MyDataSet;
        //    MySource.DataMember = MyDataSet.Tables["StokHaraketleri"].TableName;
        //    dataGridView1.DataSource = MySource;


        //}
        DBBaglantiDataContext db = new DBBaglantiDataContext();



        private void bt_UrunID_Click(object sender, EventArgs e)
        {
            UrunListesiFrm Urunlistesi = new Depo.UrunListesiFrm();
            Urunlistesi.AcanForm = this;
            Urunlistesi.Show();
        }

        public void Urunisimgetir()
        {


            UrunAdi.Text = (from x in db.MErkezUrunlers where x.UrunId == UrunID.Text select x.UrunADi).FirstOrDefault();
        }


        private void bt_kaydet_Click(object sender, EventArgs e)
        {

            List<StokHaraketleri> Stokinsert = new List<StokHaraketleri>();


            if (KaynakSube != HedefSube && StokHaraketIrsaliyeNo.Text.Trim().Length > 0 && StokHaraketHaraketTuru.Text.Trim().Length > 0 && TransferListesi.Count > 0)
            {

                foreach (Listetut item in TransferListesi)
                {
                    StokHaraketleri sh = new StokHaraketleri();
                    sh.StokHaraketID = item.StokHaraketID;
                    sh.UrunID = item.UrunID;
                    sh.StokHaraketAdet = item.StokHaraketAdet;
                    sh.StokHaraketGonderenSubeID = item.StokHaraketGonderenSubeID;
                    sh.StokHaraketAlanSubeID = item.StokHaraketAlanSubeID;
                    sh.StokHaraketTarih = item.StokHaraketTarih;
                    sh.StokHaraketHaraketTuru = item.StokHaraketHaraketTuru;
                    sh.StokHaraketIrsaliyeNo = item.StokHaraketIrsaliyeNo;

                    if (sh.StokHaraketID == 0)
                    {
                        Stokinsert.Add(sh);
                        db.StokHaraketleris.InsertAllOnSubmit(Stokinsert);
                        db.SubmitChanges();
                    }
                    else
                    {
                        var update = (from x in db.StokHaraketleris where x.StokHaraketID == sh.StokHaraketID select x).FirstOrDefault();

                        update.UrunID = sh.UrunID;
                        update.StokHaraketAdet = sh.StokHaraketAdet;
                        update.StokHaraketGonderenSubeID = sh.StokHaraketGonderenSubeID;
                        update.StokHaraketAlanSubeID = sh.StokHaraketAlanSubeID;
                        update.StokHaraketTarih = sh.StokHaraketTarih;
                        update.StokHaraketHaraketTuru = sh.StokHaraketHaraketTuru;
                        update.StokHaraketIrsaliyeNo = sh.StokHaraketIrsaliyeNo;
                        db.SubmitChanges();
                    }
                }
                List<MErkezUrunler> MerkezUrunler = new List<MErkezUrunler>();
                List<SubeUrunler> SubeUrunler = new List<SubeUrunler>();
                var UrunUpdateAlanbul = (from x in TransferListesi select x).ToList();
                foreach (var item in UrunUpdateAlanbul)
                {
                    MErkezUrunler mu = new MErkezUrunler();
                    mu.UrunId = item.UrunID;
                    mu.UrunStokAdet = item.StokHaraketAdet;
                    mu.UrunSatisCikisTarihi = item.StokHaraketTarih;
                    mu.UrunSatisCikisSebebi = item.StokHaraketHaraketTuru;
                    MerkezUrunler.Add(mu);
                }
                foreach (var item in MerkezUrunler)
                {
                    var MerkezUrunlersor = (from x in db.MErkezUrunlers where x.UrunId == item.UrunId select x).FirstOrDefault();

                    if (MerkezUrunlersor != null)
                    {
                        MerkezUrunlersor.UrunStokAdet -= item.UrunStokAdet;
                        MerkezUrunlersor.UrunSatisCikisTarihi = item.UrunSatisCikisTarihi;
                        MerkezUrunlersor.UrunSatisCikisSebebi = item.UrunSatisCikisSebebi;
                        db.SubmitChanges();
                    }
                }
                foreach (var item in MerkezUrunler)
                {
                    SubeUrunler su = new SubeUrunler();
                    if (KaynakSube == 1)
                    {
                        var SubeUrunlersor = (from x in db.SubeUrunlers where x.UrunId == item.UrunId select x).FirstOrDefault();

                        if (SubeUrunlersor != null)
                        {
                            SubeUrunlersor.SubeStokAdet += item.UrunStokAdet;
                            db.SubmitChanges();
                        }
                        else
                        {
                            su = new SubeUrunler();
                            su.SubeID = HedefSube;
                            su.UrunId = item.UrunId;
                            su.SubeStokAdet += item.UrunStokAdet;
                            su.SubeSatisCikisTarihi = item.UrunSatisCikisTarihi;
                            su.SubeSatisCikisSebebi = item.UrunSatisCikisSebebi;
                            SubeUrunler.Add(su);
                            db.SubeUrunlers.InsertOnSubmit(su);
                            db.SubmitChanges();
                        }
                    }
                    if (SubeUrunler.Count > 0)
                    {
                        MessageBox.Show("Şube için stok kartları oluşturuldu");
                        SubeUrunler.Clear();
                    }
                }
                TransferListesi.Clear();
                Stokinsert.Clear();
                dataGridView1.DataSource = TransferListesi.ToList();
                dataGridView1.Refresh();
                StokHaraketIrsaliyeNo.Text = string.Empty;
                StokHaraketHaraketTuru.Text = string.Empty;
                StokHaraketGonderenSubeID.SelectedValue = KaynakSube;
                StokHaraketAlanSubeID.SelectedValue = HedefSube;
                UrunID.Text = "";
                UrunAdi.Text = "";
                StokHaraketAdet.Text = "0.00";
                StokHaraketAdetToplam.Text = "0.00";


            }
            else
            {
                if (KaynakSube == HedefSube)
                {
                    MessageBox.Show("Farklı bir şube seçiniz");
                }
                if (StokHaraketIrsaliyeNo.Text.Trim().Length <= 0)
                {
                    MessageBox.Show("Evrak numarası boş geçilemez");
                }

                if (StokHaraketHaraketTuru.Text.Trim().Length == 0)
                {
                    MessageBox.Show("Açıklama Boş geçilemez");
                }
                if (TransferListesi.Count == 0)
                {

                    MessageBox.Show("Kayıt yapılacak liste Boş");
                }
            }


        }

        string GecerliKayit;
        int KaynakSube = 1;
        int HedefSube = 1;

        private void StokHaraketAlanSubeID_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {

                HedefSube = Convert.ToInt32(StokHaraketAlanSubeID.SelectedValue);
                if (KaynakSube == HedefSube)
                {
                    MessageBox.Show("Farklı bir şube seçiniz");
                    StokHaraketAlanSubeID.Focus();
                }
            }
            catch
            {
            }
        }

        private void StokHaraketGonderenSubeID_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                KaynakSube = Convert.ToInt32(StokHaraketGonderenSubeID.SelectedValue);
                if (KaynakSube == HedefSube)
                {
                    MessageBox.Show("Farklı bir şube seçiniz");
                    StokHaraketGonderenSubeID.Focus();
                }
            }
            catch
            {


            }
        }



        private void bt_StokHaraketID_Click(object sender, EventArgs e)
        {
            TransferEvrakListesiFrm Transferlistesi = new Depo.TransferEvrakListesiFrm();
            Transferlistesi.AcanForm = this;
            Transferlistesi.Show();
        }



        public void Evrakgetir(string evrakno)
        {
            try
            {
                TransferListesi.Clear();
                dataGridView1.DataSource = TransferListesi.ToList();
                dataGridView1.Refresh();
                var kayitgetir = (from x in db.StokHaraketleris where x.StokHaraketIrsaliyeNo == evrakno select x).ToList();
                Listetut sh = new Listetut();
                foreach (var item in kayitgetir)
                {
                    sh = new Listetut();
                    sh.StokHaraketID = item.StokHaraketID;
                    sh.StokHaraketGonderenSubeID = item.StokHaraketGonderenSubeID;
                    sh.StokHaraketAlanSubeID = item.StokHaraketAlanSubeID;
                    sh.StokHaraketTarih = item.StokHaraketTarih;
                    sh.StokHaraketHaraketTuru = item.StokHaraketHaraketTuru;
                    sh.StokHaraketIrsaliyeNo = item.StokHaraketIrsaliyeNo;
                    sh.UrunID = item.UrunID;
                    sh.UrunADi = (from x in db.MErkezUrunlers where x.UrunId == item.UrunID select x.UrunADi).FirstOrDefault();
                    sh.StokHaraketAdet = item.StokHaraketAdet;
                    TransferListesi.Add(sh);

                }
                StokHaraketTarih.Value = sh.StokHaraketTarih;
                StokHaraketHaraketTuru.Text = sh.StokHaraketHaraketTuru;
                StokHaraketGonderenSubeID.SelectedValue = sh.StokHaraketGonderenSubeID;
                StokHaraketAlanSubeID.SelectedValue = sh.StokHaraketAlanSubeID;
                dataGridView1.DataSource = TransferListesi;
                adet = TransferListesi.Sum(f => f.StokHaraketAdet);
                StokHaraketAdetToplam.Text = adet.ToString();

            }
            catch
            {


            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                TransferListesi.Clear();
                dataGridView1.DataSource = TransferListesi.ToList();
                dataGridView1.Refresh();
                StokHaraketIrsaliyeNo.Text = string.Empty;
                StokHaraketHaraketTuru.Text = string.Empty;
                StokHaraketGonderenSubeID.SelectedValue = KaynakSube;
                StokHaraketAlanSubeID.SelectedValue = HedefSube;
                UrunID.Text = "";
                UrunAdi.Text = "";
                StokHaraketAdet.Text = "0.00";
                StokHaraketAdetToplam.Text = "0.00";


            }
            catch
            {


            }

        }

        private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1.CurrentRow != null)

                try
                {
                    GecerliKayit = Convert.ToString(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["UrunKodu"].Value);
                    UrunID.Text = GecerliKayit;
                    UrunAdi.Text = (from x in TransferListesi where x.UrunID == GecerliKayit select x.UrunADi).FirstOrDefault();
                    StokHaraketAdet.Text = Convert.ToString(dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["HaraketAdet"].Value);
                }
                catch
                {


                }
        }

        private void bt_prnt_Click(object sender, EventArgs e)
        {
            printDocument1.Print();
        }
        float Yukseklik = 10;
        private void YaziYaz(Graphics g, string Yazi, float LeftMargin, bool Baslik, bool SatirAtla)
        {
            Font f = new Font("Arial", 14f);
            if (Baslik)
            {
                f = new Font("Arial", 16f, FontStyle.Bold);
            }
            
            g.DrawString(Yazi, f, Brushes.Black, LeftMargin, Yukseklik);
            if (SatirAtla)
            {
                Yukseklik += g.MeasureString(Yazi, f).Height;
            }
        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawString("Firma Adı Falan Filan", new Font("Arial", 22f, FontStyle.Bold), Brushes.Black, 10, 10);
            Yukseklik += e.Graphics.MeasureString("Miktar", new Font("Arial", 22f, FontStyle.Bold)).Height;

            YaziYaz(e.Graphics, "Evrak No          : ", 10, true, false);
            YaziYaz(e.Graphics, StokHaraketIrsaliyeNo.Text, 190, false, false);

            YaziYaz(e.Graphics, "Tarih          : ", 350, true, false);
            YaziYaz(e.Graphics, StokHaraketTarih.Value.ToString(), 475, false, true);

            YaziYaz(e.Graphics, "Gonderen Şube: ", 10, true, false);
            YaziYaz(e.Graphics, StokHaraketGonderenSubeID.Text, 190, false, false);

            YaziYaz(e.Graphics, "Alıcı Şube: ", 350, true, false);
            YaziYaz(e.Graphics, StokHaraketAlanSubeID.Text, 475, false, true);


            Yukseklik += 25;
            YaziYaz(e.Graphics, "Urun Kodu", 10, true, false);
            YaziYaz(e.Graphics, "Urun Adı", 200, true, false);
            YaziYaz(e.Graphics, "Miktar", 600, true, false);
            Yukseklik += e.Graphics.MeasureString("Miktar", new Font("Arial", 16f, FontStyle.Bold)).Height;
            e.Graphics.DrawLine(new Pen(Color.Black), 10, Yukseklik, e.PageBounds.Width - 20, Yukseklik);
            Yukseklik += 5;
            foreach (DataGridViewRow satir in dataGridView1.Rows)
            {
                YaziYaz(e.Graphics, satir.Cells["UrunKodu"].Value.ToString(), 10, false, false);
                YaziYaz(e.Graphics, satir.Cells["ADi"].Value.ToString(), 200, false, false);
                YaziYaz(e.Graphics, satir.Cells["HaraketAdet"].Value.ToString(), 600, false, true);
            }
            Yukseklik += 5;
            e.Graphics.DrawLine(new Pen(Color.Black), 10, Yukseklik, e.PageBounds.Width - 20, Yukseklik);
            Yukseklik += 5;

            YaziYaz(e.Graphics, "Toplam Miktar", 400, false, false);
            YaziYaz(e.Graphics, StokHaraketAdetToplam.Text, 600, false, true);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            printPreviewDialog1.ShowDialog();
        }












    }
}
